package com.chapter4.superprivatefinal.demo1;


/**
 *
 * 当子类并不想整个替换父类的方法代码，只是希望在继承父类方法的同时，添加一些额外的功能。
 * 那这要怎么实现呢？如果子类覆盖了父类的对应方法，子类对象调用的就是重写的方法，
 * 就可以在重写的方法中先调用父类的方法，再添加额外的功能实现代码
 *
 */
public class Fish extends Animal {
    Fish(){
        System.out.println("Fish 无参构造方法");
    }


    Fish(int weight){
        //调用父类带参构造方法
        super(50,weight);
    }

    Fish(int height,int weight){
        //调用父类带参构造方法
        super(height,weight);
    }

    void breathe(){
        //在子类中通过super，调用被子类覆盖的父类方法
        super.breathe();
        System.out.println("Fish breathe");
    }


    void swim(){
        System.out.println("Fish swim");
    }


    public static void main(String[] args) {
        Fish fish = new Fish();

        Fish fish2 = new Fish(30);
        //鱼会继承父类的高度变量50
        System.out.println("鱼的高度"+ fish2.height);
        System.out.println("鱼的重量"+ fish2.weight);

        Animal an2 = fish2;
        System.out.println("动物的高度"+ an2.height);
        System.out.println("动物的重量"+ an2.weight);

        Fish fish3 = new Fish(20,20);
        System.out.println("鱼的高度"+ fish3.height);
        System.out.println("鱼的重量"+ fish3.weight);

        Animal an3 = fish3;
        System.out.println("动物的高度"+ an3.height);
        System.out.println("动物的重量"+ an3.weight);
    }

}